﻿Public Class frmPracownik

    Private mvarChanged As Boolean = False
    Private mvarCancel As Boolean = False
    Private mvarPracownik As clsInhPracownik
    Private mvarDbHolder As clsDataBase
    Private mvarId As Integer
    Private mvarWyznEdytowania As Boolean = False
    Private mvarBlokowanie As clsRecordLock
    Private mvarWyznBlokowania As Boolean = False
    Private mvarI As Integer
    Private mvarWyzn As Boolean
    Private mvarUzytkownik As clsUzytkownik
    Private mvarKomunikat As String

    Public Sub New(ByVal IdPracownika As Integer)

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)

        If IdPracownika = 0 Then
            mvarPracownik = New clsInhPracownik()
            WyczyscInformacje()
            mvarChanged = False
        Else
            mvarPracownik = New clsInhPracownik(IdPracownika, mvarDbHolder)
            Blokowanie()
            UzupelnienieDanych()

            Me.Text = "WIREMET - EDYCJA DANYCH PRACOWNIKA"

            mvarWyznEdytowania = True
            mvarChanged = False

            If mvarUzytkownik.Uprawnienia("produkcja") = 1 Then
                grbDane.Enabled = False
                grbNadaniePraw.Enabled = False
                grbPrzyciski.Enabled = False
            End If
        End If

    End Sub

    Private Sub Blokowanie()

        mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, CLng(mvarPracownik.Id), "oem.pracownik", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
        mvarWyznBlokowania = True

        If Not mvarBlokowanie.RecordLocked Then
            MessageBox.Show("TYLKO DO ODCZYTU", "WIREMET")
            grbDane.Enabled = False
            cmdZapisz.Enabled = False
            cmdWyczysc.Enabled = False
        End If

    End Sub

    Private Sub Zapisz()

        Dim lvarNumer As Integer

        If txtNazwisko.Text.Length = 0 Then
            MessageBox.Show("Podaj nazwisko pracownika.", "WIREMET")
            mvarCancel = True
            txtNazwisko.Focus()
        Else
            lvarNumer = CType(txtNumer.Text, Integer)
            mvarId = clsInhPracownik.SprawdzNumer(mvarDbHolder, lvarNumer)
            If mvarId <> 0 And mvarWyznEdytowania = False Then
                MessageBox.Show("Pracownik o takim numerze już istnieje.", "WIREMET")
                mvarCancel = True
                txtNumer.Focus()
            Else
                With mvarPracownik
                    .Id = mvarPracownik.Id
                    .Nazwisko = txtNazwisko.Text
                    .Imie = txtImie.Text
                    .Numer = txtNumer.Text
                    .Login = txtLogin.Text
                    .Haslo = txtHaslo.Text
                    .Aktywny = chkAktywny.Checked
                    .Uprawnienia.Clear()
                    For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
                        .Uprawnienia.Add(CType(lvarRow.Tag, clsInhUprawnienia))
                    Next
                    .Save(mvarDbHolder)
                End With

                If mvarWyznEdytowania = False Then
                    WyczyscInformacje()
                    mvarPracownik = New clsInhPracownik()
                End If
                mvarChanged = False
                mvarCancel = False
                MessageBox.Show("Zapisano do bazy.", "WIREMET")
                txtNumer.Focus()
            End If

        End If

    End Sub


    Private Sub WyczyscInformacje()

        txtNumer.Text = String.Empty
        txtNazwisko.Text = String.Empty
        txtImie.Text = String.Empty
        txtLogin.Text = String.Empty
        txtHaslo.Text = String.Empty

        PobranieFunkcji()

    End Sub

    Private Sub PobranieFunkcji()

        dgvInformacje.Rows.Clear()
        mvarI = 0
        Dim lvarDataTable As New DataTable
        Dim lvarFunkcja As clsInhUprawnienia
        lvarDataTable = clsFunkcja.PobierzWszystkieFunkcje(mvarDbHolder, VAR_ERROR_HANDLER)
        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                mvarI += 1
                lvarFunkcja = New clsInhUprawnienia
                lvarFunkcja.FunkcjaId = CInt(lvarRow("id"))
                dgvInformacje.Rows.Add(lvarRow("nazwa"))
                dgvInformacje.Rows(mvarI - 1).Tag = lvarFunkcja
            Next
            dgvInformacje.Rows(0).Selected = False
        End If

    End Sub

    Private Sub UzupelnienieDanych()

        txtNumer.Text = mvarPracownik.Numer
        txtNazwisko.Text = mvarPracownik.Nazwisko
        txtImie.Text = mvarPracownik.Imie
        txtLogin.Text = mvarPracownik.Login
        txtHaslo.Text = mvarPracownik.Haslo
        chkAktywny.Checked = mvarPracownik.Aktywny
        If mvarPracownik.Uprawnienia.Count > 0 Then
            For Each lvarFunkcja As clsInhUprawnienia In mvarPracownik.Uprawnienia
                mvarI += 1
                dgvInformacje.Rows.Add(lvarFunkcja.Funkcja.Nazwa, lvarFunkcja.WyznModyfikacji, lvarFunkcja.WyznOdczytu)
                dgvInformacje.Rows(mvarI - 1).Tag = lvarFunkcja
                If lvarFunkcja.WyznModyfikacji = True And lvarFunkcja.WyznOdczytu = True Then
                    dgvInformacje.Rows.Item(dgvInformacje.Rows.Count - 1).DefaultCellStyle.BackColor = Color.LightBlue
                Else
                    dgvInformacje.Rows.Item(dgvInformacje.Rows.Count - 1).DefaultCellStyle.BackColor = Color.White
                End If
            Next
        Else
            PobranieFunkcji()
        End If

    End Sub


    Private Sub cmdZapisz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdZapisz.Click
        If mvarChanged Then
            'If Not SprawdzeniePracownika() Then
            '    MessageBox.Show(mvarKomunikat, "WIREMET")
            'Else
            Zapisz()
            'End If
        Else
        MessageBox.Show("Nie wprowadzono żadnych zmian.", "WIREMET")
        End If
    End Sub

    Private Sub cmdAnuluj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnuluj.Click
        mvarChanged = False
        Close()
    End Sub

    Private Sub cmdWyczysc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWyczysc.Click
        WyczyscInformacje()
    End Sub


    Private Sub txtLogin_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtLogin.Enter

        If txtLogin.Text <> String.Empty Then
            Dim lvarNazwisko As String
            Dim lvarImie As String

            lvarNazwisko = ZamianaPolskichZnakow(txtNazwisko.Text)
            lvarImie = ZamianaPolskichZnakow(txtImie.Text)

            txtLogin.Text = UCase(lvarImie.Substring(0, 1)) & LCase(lvarImie.Substring(1, lvarImie.Length - 1)) & UCase(lvarNazwisko.Substring(0, 1)) & LCase(lvarNazwisko.Substring(1, lvarNazwisko.Length - 1))

        End If
       
    End Sub


    Private Sub frmPracownik_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        If mvarWyznBlokowania Then
            If mvarBlokowanie.RecordLocked Then
                mvarBlokowanie.Unlock()
            End If
        End If
        mvarDbHolder.Close()
    End Sub

    Private Sub frmPracownik_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If mvarChanged Then
            Select Case MsgBox("Czy zapisać klienta do bazy?", MsgBoxStyle.YesNo, "WIREMET")
                Case MsgBoxResult.No
                Case MsgBoxResult.Yes
                    Zapisz()
                    If mvarCancel = True Then
                        e.Cancel = True
                    End If
            End Select
        End If

    End Sub


#Region "Changed"

    Private Sub txtNazwisko_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        mvarChanged = True
    End Sub

    Private Sub txtImie_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        mvarChanged = True
    End Sub

    Private Sub txtLogin_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtLogin.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtHaslo_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtHaslo.TextChanged
        mvarChanged = True
    End Sub

    Private Sub chkAktywny_CheckedChanged(sender As Object, e As EventArgs) Handles chkAktywny.CheckedChanged
        mvarChanged = True
    End Sub

    Private Sub dgvInformacje_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInformacje.CellValueChanged
        mvarChanged = True
        If dgvInformacje.SelectedRows.Count > 0 Then
            With CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhUprawnienia)
                .WyznModyfikacji = CBool(dgvInformacje.SelectedRows.Item(0).Cells("colModyfikacja").Value)
                .WyznOdczytu = CBool(dgvInformacje.SelectedRows.Item(0).Cells("colOdczyt").Value)
            End With
            If CBool(dgvInformacje.SelectedRows.Item(0).Cells("colModyfikacja").Value) AndAlso CBool(dgvInformacje.SelectedRows.Item(0).Cells("colOdczyt").Value) Then
                dgvInformacje.SelectedRows.Item(0).DefaultCellStyle.BackColor = Color.LightBlue
            Else
                dgvInformacje.SelectedRows.Item(0).DefaultCellStyle.BackColor = Color.White
            End If
        End If
    End Sub

#End Region

#Region "Tab"

    Private Sub txtNumer_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtNumer.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtNazwisko.Focus()
        End If
    End Sub

    Private Sub txtNazwisko_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtNazwisko.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtImie.Focus()
        End If
    End Sub

    Private Sub txtImie_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtImie.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtLogin.Focus()
        End If
    End Sub

    Private Sub txtLogin_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtLogin.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtHaslo.Focus()
        End If
    End Sub

    Private Sub txtHaslo_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtHaslo.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmdZapisz.Focus()
        End If
    End Sub

#End Region

    Private Function ZamianaPolskichZnakow(ByVal Slowo As String) As String

        Dim lvarLiteryPolskie As String() = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ż", "ź", "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ż", "Ź"}
        Dim lvarLiteryZwykle As String() = {"a", "c", "e", "l", "n", "o", "s", "z", "z", "A", "C", "E", "L", "N", "O", "S", "Z", "Z"}
        Dim lvarSlowo As String

        lvarSlowo = Slowo
        For lvarI = LBound(lvarLiteryPolskie) To UBound(lvarLiteryZwykle)
            lvarSlowo = Replace(lvarSlowo, lvarLiteryPolskie(lvarI), lvarLiteryZwykle(lvarI))
        Next lvarI

        Return lvarSlowo

    End Function

    Function SprawdzLiczbeCalkowita(ByVal Liczba1 As String) As Boolean

        If Liczba1 <> String.Empty And IsNumeric(Liczba1) Then
            If InStr(Liczba1, ",") = Nothing And CInt(Liczba1) > 0 Then
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If

    End Function

    'Function SprawdzeniePracownika() As Boolean


    '    If SprawdzLiczbeCalkowita(txtNumer.Text) And txtNazwisko.Text <> String.Empty And txtLogin.Text <> String.Empty And txtHaslo.Text <> String.Empty Then
    '        For Each lvarRow As DataGridViewRow In lvarFrm.dgvInformacje.Rows
    '            If CType(lvarRow.Tag, clsInhPracownik).Numer = txtNumer.Text Then
    '                mvarKomunikat = "Pracownik o takim numerze już istnieje w bazie danych."
    '                Return False

    '                ' Exit For
    '            End If
    '            If CType(lvarRow.Tag, clsInhPracownik).Login = txtLogin.Text And txtLogin.Text <> String.Empty Then
    '                mvarKomunikat = "Taka nazwa użytkownika już istnieje w bazie danych."
    '                Return False
    '                '  Exit For
    '            End If
    '        Next
    '        Return True
    '    Else
    '        mvarKomunikat = "Wpisz wszytskie dane poprawnie."
    '        Return False

    '    End If

    'End Function


End Class


